// 统一管理axios的所有配置文件
// 引入axios核心库
import axios from "axios";
// 引入字符串查询工具
import querystring from "querystring";
// 引入封装好的路由模块
import router from '../router'

// 设置一个基础地址
let baseUrl = "/api";

// 请求拦截器
axios.interceptors.request.use((req) => {
  // 设置token请求头
  req.headers.authorization = sessionStorage.getItem("userinfo")
    ? JSON.parse(sessionStorage.getItem("userinfo")).token
    : null;
  //必须要加 return 通过return返回
  return req;
});

// 全局响应拦截器
axios.interceptors.response.use((res) => {
  if (res.data.msg == "请设置请求头，并携带验证字符串") {
    // 重新登陆
    router.push("/login");
    return;
  }
  if (res.data.msg == "登录已过期或访问权限受限") {
    router.push("/login");
    return;
  }
  return res.data;
});

/* 
统一封装get方法
url: 接口地址
params : 参数
*/

// 导出封装好的实例
export const get = (url, params = {}) => {
  // 可以利用promise去返回成功和失败
  return new Promise((resolve, reject) => {
    axios
      .get(baseUrl + url, {
        params,
      })
      .then((res) => {
        resolve(res);
      })
      .catch((err) => {
        reject(err);
      });
  });
};

/* 
统一封装post方法
url: 接口地址
params : 参数
isFile:是否含有上传文件
*/
export const post = (url, params = {}, isFile = false) => {
  let data = {};
  // 判断是否有上传文件
  if (isFile) {
    // 如果有上传文件，就转化成为FormData格式
    data = new FormData();
    for (let i in params) {
      data.append(i, params[i]);
    }
  } else {
    // 无上传文件
    data = querystring.stringify(params);
  }
  return new Promise((resolve, reject) => {
    axios
      .post(baseUrl + url, data)
      .then((res) => {
        resolve(res);
      })
      .catch((err) => {
        reject(err);
      });
  });
};
